package com.hgw.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/*
* 一、整合MyBatisPlus
*    1) 导入依赖
*    <!--MyBatisPlus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
*    2) 配置文件
*       2.1. 配置数据源
*           2.1.1、导入数据库的驱动
*           2.1.2、在application.yml配置相关数据源
*       2.2. 配置 MyBatisPlus
*           2.2.1、通过@MapperScan注解 指定扫描文件位置
*           2.2.2、告诉MyBatis-Plus，sql映射文件位置
*
* 二、逻辑删除
*  1、配置全局的逻辑删除规则（可省略）
*  2、配置逻辑删除的组件Bean（mybatis-plus3之后可省略）
*  3、实体类字段上加上@TableLogic注解
*
* 三、数据校验JSR303
*   1、给需要校验的数据（Bean) 添加校验注解  javax.validation.constraints，并定义自己的message提示
*   2、在需要校验的方法上添加@Valid注解，并返回提示信息
*       效果： 校验错误以后会有默认的响应
*   3、给校验的bean后紧跟着一个BindingResult，就可以获取到校验的结果
*   4、分组校验（多场景的复杂校验）
*       1) @NotNull(message = "修改必须指定品牌id",groups = {UpdateGroup.class})
* 	       @Null(message = "新增不能指定id", groups = {AddGroup.class})
*          给校验注解标注什么情况需要进行校验
*       2）@Validated({UpdateGroup.class} 标记当前校验是哪个组
*       3）默认没有指定分组的校验注解@NotBlank， 在分组校验情况下不生效
*   5、自定义校验
*       1）编写一个自定义的校验注解
*       2）编写一个自定义的校验器
*       3）关联自定义的校验器和自定义的校验注解
*
* 四、做一个统一的异常处理
* @ControllerAdvice
*   1、抽取一个异常处理类
* */
@EnableFeignClients(basePackages = "com.hgw.gulimall.product.feign")
@MapperScan("com/hgw/gulimall/product/dao")     // 扫描的我们的mapper文件夹
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
